# -*- coding:utf-8 -*-


'''
dp(n):n个字符可能的结果
1.s[i-2]和s[i-1] 两个字符是10----26之间但不包括10和20这两个数时：
eg:判断“567123”的编码方式可以转为判断“56712”+‘3“或者”5671“+”23“的问题。即dp(n)=dp(n-1)+dp(n-2)。
2.s[i-2]和s[i-1] 两个字符10或20这两个数时，只有一种编码方式，比如10------>[“J”], 所以dp[i] = dp[i-2]
3.s[i-2]和s[i-1] 两个字符不在上述两种范围时，比如27，所以dp[i] = dp[i-1]
4.数字”0“对应的编码只能是和其前一个数字组合对应的编码，如果和其前一个字符组合后不存在对应编码，则编码方式为0.
'''
dp = [1,1]
s = raw_input().strip()
if s=='' or s[0]=='0': dp = [0,0]     #此时下面的for不会运行，也不报错

for i in range(2, len(s) + 1):
    if 10 <= int(s[i - 2:i]) <= 26 and s[i - 1] != '0':  # 1
        dp.append(dp[i - 1] + dp[i - 2])
    elif int(s[i - 2:i]) == 10 or int(s[i - 2:i]) == 20:  # 2
        dp.append(dp[i - 2])
    elif s[i - 1] != '0':  # 3
        dp.append(dp[i - 1])
    else:
        dp.append(0)  # 4


print dp[len(s)]